package co.edu.udea.iw.prestamos.util.jersey;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import javax.management.relation.RoleList;
import javax.ws.rs.Produces;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;

import co.edu.udea.iw.prestamos.modelo.dto.DispositivoList;
import co.edu.udea.iw.prestamos.modelo.dto.EstadoPrestamoList;
import co.edu.udea.iw.prestamos.modelo.dto.PrestamoList;
import co.edu.udea.iw.prestamos.modelo.dto.TipoDispositivoList;
import co.edu.udea.iw.prestamos.modelo.dto.UsuarioList;

import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;

/**
 * Clase que configura la forma de los paquetes enviados. Permite que todas las
 * listas sean enviadas en forma de array aunque tenga un solo objeto
 * @author Dave Rivera <daverivera90@gmail.com>
 * @version 1.0
 * @since 18-02-2014
 */
@Provider
@Produces ("application/json")
public class JAXBContextResolver implements ContextResolver<JAXBContext> {

    private JAXBContext context;
    private final Set<Class> typesList;
//    private Class[] types = {ActividadList.class, ActividadesMateriaList.class, MateriaList.class, SemestrePackageList.class};
    private Class[] types = {DispositivoList.class, EstadoPrestamoList.class, PrestamoList.class, RoleList.class, TipoDispositivoList.class, UsuarioList.class};

    public JAXBContextResolver() throws Exception {
        this.typesList = new HashSet(Arrays.asList(types));
        this.context = new JSONJAXBContext(JSONConfiguration.mapped()
                .arrays("dispositivos", "estadosprestamo", "prestamos", "roles", "tiposDispositivo", "usuarios")
                .build(),
                types);
    }

    public JAXBContext getContext(Class type) {
        return (typesList.contains(type)) ? context : null;
    }
}
